使用 redirect() 函數可以重新導向到指定網址
而 abort() 可以直接中斷請求,並返回 status code
from flask import abort, redirect, url_for
@app.route('/')
def index():
return redirect(url_for('login'))
@app.route('/login')
def login():
abort(401)
this_is_never_executed()
如果想在 404 的時候顯示 error.html 畫面
@app.errorhandler(404)
def not_found(error):
return render_template('error.html'), 404
還可以使用 make_response() 把回傳表達式包起來,獲得回傳的物件後進行修改再回傳
@app.errorhandler(404)
def not_found(error):
resp = make_response(render_template('error.html'), 404)
resp.headers['X-Something'] = 'A value'
return resp
在前後端分離的情境下,用 JSON 作為 API 回傳格式是很常見的作法
如果回傳一個dict
到 view 裡面,就會被轉換成一個 JSON 的回傳格式
@app.route("/me")
def me_api():
user = get_current_user()
return {
"username": user.username,
"theme": user.theme,
"image": url_for("user_image", filename=user.image),
}
如果單純回傳dict
不足以滿足需求,還想創建其他類型的 JSON 格式回傳
可以使用 jsonify() 函數,當然也可以到套件包裡找找有沒有適合的
@app.route("/users")
def users_api():
users = get_all_users()
return jsonify([user.to_json() for user in users])